Kubernetes 集群 是一組運(yùn)行容器化應(yīng)用程序的節(jié)點(diǎn)。容器化應(yīng)用程序?qū)?yīng)用程序與其依賴項和一些必要的服務(wù)打包在一起。它們比虛擬機(jī)更輕巧、更靈活。通過這種方式,Kubernetes 集群允許更輕松地開發(fā)、移動和管理應(yīng)用程序。Kubernetes 集群允許容器跨多臺機(jī)器和環(huán)境運(yùn)行:虛擬機(jī)、物理機(jī)、基于云的和本地。與虛擬機(jī)不同,Kubernetes 容器不限于特定的操作系統(tǒng)。相反,它們能夠共享操作系統(tǒng)并在任何地方運(yùn)行。
Kubernetes 集群由一個主節(jié)點(diǎn)和多個工作節(jié)點(diǎn)組成。這些節(jié)點(diǎn)可以是物理計算機(jī)或虛擬機(jī),具體取決于集群。主節(jié)點(diǎn)控制集群的狀態(tài);例如,哪些應(yīng)用程序正在運(yùn)行以及它們對應(yīng)的容器映像。主節(jié)點(diǎn)是所有任務(wù)分配的來源。它協(xié)調(diào)流程,例如:
- 調(diào)度 和擴(kuò)展應(yīng)用程序
- 維護(hù) 集群的狀態(tài)
- 實(shí)施 更新
工作節(jié)點(diǎn) 是運(yùn)行這些應(yīng)用程序的組件。 工作節(jié)點(diǎn)執(zhí)行主節(jié)點(diǎn)分配的任務(wù)。它們可以是 虛擬機(jī) 或物理計算機(jī),都作為一個系統(tǒng)的一部分運(yùn)行。Kubernetes 集群必須至少有一個主節(jié)點(diǎn)和一個工作節(jié)點(diǎn)才能運(yùn)行。對于生產(chǎn)和登臺,集群分布在多個工作節(jié)點(diǎn)上。對于測試,組件可以全部運(yùn)行在同一個物理或虛擬節(jié)點(diǎn)上。
命名空間 是 Kubernetes 用戶在一個物理集群中組織許多不同集群的一種方式。 命名空間使用戶能夠通過資源配額在不同團(tuán)隊之間劃分物理集群內(nèi)的集群資源。因此,它們非常適合涉及復(fù)雜項目或多個團(tuán)隊的情況。
Kubernetes 集群由什么組成?
一個 Kubernetes 集群包含六個主要組件:
- API 服務(wù)器: 向所有 Kubernetes 資源公開一個 REST 接口。作為 Kubernetes 控制平面的前端。
- 調(diào)度器:根據(jù)資源需求和指標(biāo)放置容器。記下沒有分配節(jié)點(diǎn)的 Pod,并選擇要在其上運(yùn)行的節(jié)點(diǎn)。
- 控制器管理器:運(yùn)行控制器進(jìn)程并將集群的實(shí)際狀態(tài)與其所需的規(guī)范相協(xié)調(diào)。管理控制器,例如節(jié)點(diǎn)控制器、端點(diǎn)控制器和復(fù)制控制器。
- Kubelet:通過與 Docker 引擎(用于創(chuàng)建和管理容器的默認(rèn)程序)交互,確保容器在 Pod 中運(yùn)行。獲取一組提供的 PodSpec 并確保其對應(yīng)的容器完全可操作。
- Kube-proxy:管理網(wǎng)絡(luò)連接并維護(hù)跨節(jié)點(diǎn)的網(wǎng)絡(luò)規(guī)則。在給定集群中的每個節(jié)點(diǎn)上實(shí)現(xiàn) Kubernetes 服務(wù)概念。
- etcd:存儲所有集群數(shù)據(jù)。一致且高度可用的 Kubernetes 后備存儲。
這六個組件都可以在 Linux 上運(yùn)行或作為 Docker 容器運(yùn)行。主節(jié)點(diǎn)運(yùn)行 API 服務(wù)器、調(diào)度程序和控制器管理器,工作節(jié)點(diǎn)運(yùn)行 kubelet 和 kube-proxy。
您如何使用 Kubernetes 集群?
要使用 Kubernetes 集群,您必須首先確定其所需狀態(tài)。Kubernetes 集群的期望狀態(tài)定義了許多操作元素,包括:
- 應(yīng)該運(yùn)行的應(yīng)用程序和工作負(fù)載
- 這些應(yīng)用程序需要使用的圖像
- 應(yīng)為這些應(yīng)用程序提供的資源
- 所需副本數(shù)量
為了定義所需的狀態(tài),JSON 或 YAML 文件(稱為清單)用于指定應(yīng)用程序類型和運(yùn)行系統(tǒng)所需的副本數(shù)量。開發(fā)人員使用 Kubernetes API 來定義集群的期望狀態(tài)。這種開發(fā)人員交互使用命令行界面 (kubectl) 或利用 API 直接與集群交互以手動設(shè)置所需的狀態(tài)。然后,主節(jié)點(diǎn)將通過 API 將所需狀態(tài)傳達(dá)給工作節(jié)點(diǎn)。
Kubernetes 通過 Kubernetes 控制平面自動管理集群以使其與所需狀態(tài)保持一致。Kubernetes 控制平面的職責(zé)包括調(diào)度集群活動以及注冊和響應(yīng)集群事件。
Kubernetes 控制平面運(yùn)行連續(xù)的控制循環(huán),以確保集群的實(shí)際狀態(tài)與其期望的狀態(tài)相匹配。例如,如果您部署一個應(yīng)用程序以使用五個副本運(yùn)行,但其中一個崩潰了,Kubernetes 控制平面將注冊此崩潰并部署一個額外的副本,以便保持五個副本的期望狀態(tài)。
自動化通過 Pod 生命周期事件生成器或 PLEG 進(jìn)行。這些自動任務(wù)可以包括:
- 啟動 和重啟容器
- 調(diào)整 應(yīng)用程序的副本數(shù)
- 驗(yàn)證 容器鏡像
- 啟動 和管理容器
- 實(shí)施 更新和回滾
如何創(chuàng)建 Kubernetes 集群?
您可以在物理機(jī)或虛擬機(jī)上創(chuàng)建和部署 Kubernetes 集群。建議新用戶使用 Minikube 開始創(chuàng)建 Kubernetes 集群。Minikube 是一個開源工具,兼容 Linux、Mac 和 Windows 操作系統(tǒng)。Minikube 可用于創(chuàng)建和部署僅包含一個工作節(jié)點(diǎn)的簡單、流線型集群。
此外,您可以使用 Kubernetes 模式來自動管理集群規(guī)模。Kubernetes 模式有助于將基于云的架構(gòu)重用于基于容器的應(yīng)用程序。雖然 Kubernetes 確實(shí)提供了許多有用的 API,但它沒有提供如何將這些工具成功整合到操作系統(tǒng)中的指南。Kubernetes 模式提供了一種一致的方式來訪問和重用現(xiàn)有的 Kubernetes 架構(gòu)。您可以利用可重用的 Kubernetes 集群藍(lán)圖網(wǎng)絡(luò),而不是自己創(chuàng)建這些結(jié)構(gòu)。